﻿/*****************************************************************//**
 *
 * @file   FITKAbaqusAdaptorMaterial.h
 * @brief  Abaqus Material 适配器 用于读取INP过程中的Material解析。
 * @author fulipeng (flipengqd@yeah.net)
 * @date   2024-03-19
 *
 *********************************************************************/
#ifndef __FITKABAQUSADAPTORMATERIAL__H__
#define __FITKABAQUSADAPTORMATERIAL__H__

#include "FITKAbaqusAbstractAdaptor.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"

//前置声明
ForwardDeclarNS(Interface, FITKAbaMaterial)
typedef void(*FunctionPointer)();
namespace IO
{
    /**
     * @brief Abaqus Material 读写适配器
     * @author fulipeng (fulipengqd@yeah.net)
     * @date 2024-03-15
     */
    class FITKAbaqusIOINPAPI FITKAbaqusAdaptorMaterial : public FITKAbaqusAbstractAdaptor
    {
    public:
        explicit FITKAbaqusAdaptorMaterial() = default;
        ~FITKAbaqusAdaptorMaterial() = default;

        /**
         * @brief 获取适配器数据类型名
         * @return 适配器数据类型名
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        QString getAdaptorClass() override;

         /**
          * @brief 适配器读取
          * @return 状态 true成功， false失败
          * @author fulipeng (fulipengqd@yeah.net)
          * @date 2024-03-20
          */
        bool adaptR() override;

        /**
         * @brief 适配器写出
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        bool adaptW() override;


    private:

        /**
         * @brief 读取材料密度项
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        bool readDensity();

        /**
         * @brief 写出材料密度项
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-22
         */
        bool writeDensity();

        /**
         * @brief 读取材料弹性项
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        bool readElastic();

        /**
        * @brief 写出材料弹性项
        * @return 状态 true成功， false失败
        * @author fulipeng (fulipengqd@yeah.net)
        * @date 2024-03-22
        */
        bool writeElastic();

        //后续按照类型拆分
        //bool readElasticType(Interface::FITKAbaMaterialElasticType t);

        /**
         * @brief 读取材料塑性项
         * @return 
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-21
         */
        bool readPlastic();

        /**
        * @brief 写出材料塑性项
        * @return 状态 true成功， false失败
        * @author fulipeng (fulipengqd@yeah.net)
        * @date 2024-03-22
        */
        bool writePlastic();

        /**
        * @brief 读取J-C金属损伤项
        * @return 状态 true成功， false失败
        * @author fulipeng (fulipengqd@yeah.net)
        * @date 2024-03-20
        */
        bool readJohnsonCookDamage();

        /**
         * @brief 读入超弹性材料
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-17
         */
        bool readHyperelastic();

        /**
         * @brief 写出超弹性材料
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-17
         */
        bool writeHyperelastic();
        /**
         * @brief 读取损伤
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readDamageInitiation();
        /**
         * @brief 写出损伤
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeDamageInitiation();
        /**
         * @brief 读取阻尼
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readDamping();
        /**
         * @brief 写出阻尼
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeDamping();
        /**
         * @brief 读取膨胀
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readExpansion();
        /**
         * @brief 写出膨胀
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeExpansion();

    private:

        /**
         * @brief 材料数据
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        Interface::FITKAbaMaterial* _materialData{};

    };

    Register2FITKIOAdaptorFactory(INP, Interface::FITKAbaMaterial, FITKAbaqusAdaptorMaterial)
}

#endif
